package team.zero.lemon.pattern.Proxy;

import java.lang.reflect.Proxy;

/**
 * Created by bolin on 2016/12/6.
 */
public class MyProxyFactory {
    //为指定target生成动态代理对象

    public static Object getProxy(Object target) throws Exception {
        //创建一个MyInvokationHandler对象
        MyInvokationHandler handler = new MyInvokationHandler();
        //为MyInvokationHandler设置target对象
        handler.setTarget(target);
        //创建、并返回一个动态代理
        return Proxy.newProxyInstance(target.getClass().getClassLoader()
                , target.getClass().getInterfaces(), handler);
    }

    public static void main(String[] args) throws Exception {
        //创建一个原始的GunDog对象，作为target
        Panther target = new GunPanther();
        //以指定的target来创建动态代理
        Panther panther = (Panther) MyProxyFactory.getProxy(target);
        //调用代理对象的info()和run()方法
        panther.info();
        panther.run();
    }
}

